﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace PinLayoutMVC.Models
{
    public class BitOperations
    {

        // Deze functie zorgt er voor dat een bool naar een long om gezet wordt.
        public static long boolToLong(bool inputBool)
        {
            if (inputBool)
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }

        // Deze functie zorgt er voor dat een string geconveerd word naar een bool en dan naar een long.
        public static long boolToLong(string inputString)
        {
            bool inputBool = Convert.ToBoolean(inputString);
            if (inputBool)
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }

        // Deze functie zorgt er voor wanneer dat de bool omgezet worden naar de juiste waarde.
        // Deze functie wordt meestal gebruikt om te zorgen dat de juiste waardes ingevoerd worden van een View naar de DB
        public static long longMultiple(bool inputBool, long longOperator)
        {

            if (inputBool)
            {
                return 1 * longOperator;
            }
            else
            {
                return 0 * longOperator;
            }

        }

        public static bool bitFlip(long inputLong, long longOperator)
        {
            if ((longOperator ^ longOperator) == longOperator)
            {
                return true;
            }
            return false;
        }


        public static bool bitFlipUneven(long inputLong, long longOperator)
        {
            if (inputLong % longOperator != 2)
            {
                return true;
            }
            return false;
        }

        public static long bitFlipUneven(bool inputBool, long longOperator)
        {
            long inputLong = Convert.ToInt64(inputBool);
            if (inputLong % longOperator != 2)
            {
                return inputLong ^ longOperator;
            }
            return inputLong;
        }

        public static long bitFlipEven(long inputLong, long longOperator)
        {
            if (inputLong % longOperator == 2)
            {
                return inputLong ^ longOperator;
            }
            return inputLong;
        }

        public static long bitFlipEven(bool inputBool, long longOperator)
        {
            long inputLong = Convert.ToInt64(inputBool);
            if (inputLong % longOperator == 2)
            {
                return inputLong ^ longOperator;
            }
            return inputLong;
        }

        public static bool IsLongEqualOperator(long inputLong, long longOperator)
        {
            if ((inputLong & longOperator) == longOperator)
            {
                return true;
            }
            return false;
        }

    }
}